using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
using MyWebApi.Api.Entity;
using MyWebApi.Api.ParamModel;

namespace MyWebApi.Api.Utils
{
    // Token帮助类
    public class TokenHelper
    {
        // 封装生成Token的方法
        public static string GenerateToken(TokenParameter tokenParameter , users user)
        {
            //创建一个身份认证（令牌）生成出来的Base64码包含以下
            var claims = new[]
            {
                new Claim("userName", user.UserName),  // 用户名称
                new Claim("userId", (user.Id).ToString()),  // 用户Id
                new Claim("Role", "user"),     // 用户角色
            };
            
            // 对称的安全键
            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tokenParameter.Secret));
            // 签名证书
            var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            // Jwt令牌
            var jwtToken = new JwtSecurityToken(tokenParameter.Issuer, null, claims, expires: DateTime.UtcNow.AddMinutes(tokenParameter.AccessExpiration), signingCredentials: credentials);
            // Jwt安全令牌处理程序
            var token = new JwtSecurityTokenHandler().WriteToken(jwtToken);

            return token;
        }
    }

}